package unicode

import "code.google.com/p/go.text/encoding/unicode"

unicode包提供了UTF-16文本的编解码服务。

Index

Variables

var ErrMissingBOM = errors.New("encoding: missing byte order mark")

ErrMissingBOM表示采用ExpectBOM策略解码输入的UTF-16文本时,没有在开始处找到字节序标记(BOM)。

type Endianness

type Endianness bool

Endianness是UTF-16的默认编码末端方向。

const (
    // BigEndian即UTF-16BE
    BigEndian Endianness = false
    // LittleEndian即UTF-16LE
    LittleEndian Endianness = true
)

type BOMPolicy

type BOMPolicy bool

BOMPolicy是UTF-16编码针对BOM标志的策略。

const (
    // IgnoreBOM表示忽略任何字节序标志
    IgnoreBOM BOMPolicy = false
    // ExpectBOM表示期望输入以字节序标志开始
    ExpectBOM BOMPolicy = true
)

func UTF16

func UTF16(e Endianness, b BOMPolicy) encoding.Encoding

UTF16使用提供的默认字节序方向和字节序BOM策略返回一个UTF-16编解码器。

当解码UTF-16到UTF-8时,如果参数b为IgnoreBOM,则不管输入流起始处的BOM是U+FEFF还是U+FFFE,都不会影响用于解码的末端方向设置;相反,它们会被解码为标准的UTF-8编码"\xef\xbb\xbf"和"\xef\xbf\xbe"。如果参数p是ExpectBOM,则解码器会期望输入流的起始处有BOM,如果没有,解码器就会以错误值ErrMissingBOM 直接返回;起始处的BOM不会写入UTF-8文本中,相反,会根据BOM重设解码的末端方向;之后序列中的U+FEFF 或非法字符U+FFFE不会影响使用中的编码末端方向,而会当成普通字符解码并写入UTF-8文本。

当编码UTF-8到UTF-16时,如果参数p为ExpectBOM,会在文本开始出添加相应的BOM;否则不会插入BOM。要编码的UTF-8文本中不需要包含BOM。

没有所谓的'本地'末端方向的概念。如果UTF-16数据是在一个很大范围内使用、且保证确定而统一的编码末端方向,参数p可使用IgnoreBOM。否则,使用ExpectBOM,并总是在编解码时生成或者使用BOM。